1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect.testing;
18
19 import static java.util.Collections.sort;
20
21 import com.google.common.annotations.GwtIncompatible;
22 import com.google.common.collect.ImmutableSortedMap;
23 import com.google.common.collect.Lists;
24 import com.google.common.collect.Ordering;
25 import com.google.common.collect.testing.Helpers.NullsBeforeTwo;
26 import com.google.common.collect.testing.features.CollectionFeature;
27 import com.google.common.collect.testing.features.CollectionSize;
28 import com.google.common.collect.testing.features.MapFeature;
29 import com.google.common.testing.SerializableTester;
30
31 import junit.framework.Test;
32 import junit.framework.TestCase;
33 import junit.framework.TestSuite;
34
35 import java.util.List;
36 import java.util.Map;
37 import java.util.Map.Entry;
38 import java.util.NavigableMap;
39 import java.util.SortedMap;
40
41
42
43
44
45
46 public class SafeTreeMapTest extends TestCase {
47 public static Test suite() {
48 TestSuite suite = new TestSuite();
49 suite.addTestSuite(SafeTreeMapTest.class);
50 suite.addTest(
51 NavigableMapTestSuiteBuilder.using(new TestStringSortedMapGenerator() {
52 @Override protected SortedMap<String, String> create(
53 Entry<String, String>[] entries) {
54 NavigableMap<String, String> map =
55 new SafeTreeMap<String, String>(Ordering.natural());
56 for (Entry<String, String> entry : entries) {
57 map.put(entry.getKey(), entry.getValue());
58 }
59 return map;
60 }
61 }).withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
62 CollectionFeature.SERIALIZABLE, MapFeature.ALLOWS_NULL_VALUES,
63 CollectionFeature.SUPPORTS_ITERATOR_REMOVE, MapFeature.GENERAL_PURPOSE).named(
64 "SafeTreeMap with natural comparator").createTestSuite());
65 suite.addTest(NavigableMapTestSuiteBuilder.using(new TestStringSortedMapGenerator() {
66 @Override protected SortedMap<String, String> create(
67 Entry<String, String>[] entries) {
68 NavigableMap<String, String> map =
69 new SafeTreeMap<String, String>(NullsBeforeTwo.INSTANCE);
70 for (Entry<String, String> entry : entries) {
71 map.put(entry.getKey(), entry.getValue());
72 }
73 return map;
74 }
75
76 @Override
77 public Iterable<Entry<String, String>> order(List<Entry<String, String>> insertionOrder) {
78 sort(insertionOrder, Helpers.<String, String>entryComparator(NullsBeforeTwo.INSTANCE));
79 return insertionOrder;
80 }
81 }).withFeatures(CollectionSize.ANY, CollectionFeature.KNOWN_ORDER,
82 MapFeature.ALLOWS_NULL_KEYS, MapFeature.ALLOWS_NULL_VALUES,
83 MapFeature.ALLOWS_ANY_NULL_QUERIES, MapFeature.GENERAL_PURPOSE,
84 CollectionFeature.SUPPORTS_ITERATOR_REMOVE, CollectionFeature.SERIALIZABLE).named(
85 "SafeTreeMap with null-friendly comparator").createTestSuite());
86 return suite;
87 }
88
89 @GwtIncompatible("SerializableTester")
90 public void testViewSerialization() {
91 Map<String, Integer> map =
92 ImmutableSortedMap.of("one", 1, "two", 2, "three", 3);
93 SerializableTester.reserializeAndAssert(map.entrySet());
94 SerializableTester.reserializeAndAssert(map.keySet());
95 assertEquals(Lists.newArrayList(map.values()),
96 Lists.newArrayList(SerializableTester.reserialize(map.values())));
97 }
98
99 @GwtIncompatible("SerializableTester")
100 public static class ReserializedMapTests
101 extends SortedMapInterfaceTest<String, Integer> {
102 public ReserializedMapTests() {
103 super(false, true, true, true, true);
104 }
105
106 @Override protected SortedMap<String, Integer> makePopulatedMap() {
107 NavigableMap<String, Integer> map = new SafeTreeMap<String, Integer>();
108 map.put("one", 1);
109 map.put("two", 2);
110 map.put("three", 3);
111 return SerializableTester.reserialize(map);
112 }
113
114 @Override protected SortedMap<String, Integer> makeEmptyMap()
115 throws UnsupportedOperationException {
116 NavigableMap<String, Integer> map = new SafeTreeMap<String, Integer>();
117 return SerializableTester.reserialize(map);
118 }
119
120 @Override protected String getKeyNotInPopulatedMap() {
121 return "minus one";
122 }
123
124 @Override protected Integer getValueNotInPopulatedMap() {
125 return -1;
126 }
127 }
128 }